import json


def convert_to_target_format(input_file, output_file):
    """
    将JSON Lines数据转换为指定格式的JSON文件
    :param input_file: 原始JSON Lines文件路径
    :param output_file: 输出的目标JSON文件路径
    """
    result_list = []
    # 单行instruction字符串，避免多余空格和换行
    instruction = "根据下列患者病例给出患者出院需要携带的药物列表，输出示例：\"左甲状腺素钠片\", \"氨氯地平片\", \"十一味参芪胶囊\", \"西洛他唑\", \"碳酸钙片\", \"阿法骨化醇\", \"金水宝\", \"阿托伐他汀钙片\", \"丹参软胶囊\"。只输出药物列表，不要解释"

    with open(input_file, 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            try:
                # 解析当前行的JSON数据
                data = json.loads(line)

                # 获取出院带药列表作为ground_truth
                ground_truth = data.get("出院带药列表", [])
                # 格式化ground_truth为字符串
                ground_truth_str = ", ".join(f'"{med}"' for med in ground_truth)

                # 构建input字符串（避免二次转义）
                input_content = {k: v for k, v in data.items() if k != "出院带药列表"}

                # 手动构建键值对字符串
                key_value_pairs = []
                for key, value in input_content.items():
                    # 处理不同数据类型
                    if isinstance(value, str):
                        # 字符串直接使用，不再额外转义
                        key_value_pairs.append(f'"{key}": "{value}"')
                    elif isinstance(value, list):
                        # 列表类型转换为JSON数组（带双引号）
                        list_items = ', '.join(f'"{item}"' if isinstance(item, str) else str(item)
                                               for item in value)
                        key_value_pairs.append(f'"{key}": [{list_items}]')
                    else:
                        # 其他类型直接转换为字符串
                        key_value_pairs.append(f'"{key}": {str(value)}')

                input_str = ', '.join(key_value_pairs)

                # 拼接instruction和input作为prompt
                prompt_str = instruction + "。" + input_str

                # 创建包含prompt和ground_truth的字典
                result_dict = {
                    "prompt": prompt_str,
                    "ground_truth": ground_truth_str
                }

                result_list.append(result_dict)

            except json.JSONDecodeError:
                continue

    # 将结果写入新的JSON文件
    with open(output_file, 'w', encoding='utf-8') as f_out:
        json.dump(result_list, f_out, ensure_ascii=False, indent=2)


# 调用示例
if __name__ == "__main__":
    input_file_path = "CDrugRed_train.jsonl"
    output_file_path = "10-23.json"
    convert_to_target_format(input_file_path, output_file_path)